package com.vtuzx.kingdee.xqc_batch.component;

import com.vtuzx.batch.component.IVtuzxBatchComponent;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.core.utils.VtuzxUtil;

import com.vtuzx.kingdee.xqc_core.dao.SyncTimeDao;
import com.vtuzx.kingdee.xqc_core.service.IVtuzxBasicService;
import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Date;

//自动同步调拨单和销售单到金蝶
@Component("sync_list")
public class SyncList implements IVtuzxBatchComponent {
    /**
     * Logger
     */
    private static final Logger _logger = LoggerFactory.getLogger(SyncList.class);

    @Autowired
    private SyncTimeDao syncTimeDao;

    @Autowired
    private IVtuzxBasicService basicService;

    /**
     * 自动同步调拨单和销售单到金蝶
     *
     * @param param 入参
     */
    @Override
    public void execute(VtuzxMap param) throws Exception {
        /*参数时间*/
        //从参数中获取开始时间
        String startDay = VtuzxUtil.getString(param, "from");
        //从参数中获取结束时间
        String endDay = VtuzxUtil.getString(param, "to");

        /*默认配置中的开始时间为-3*/
        int amountStart = -3;

        /*配置时间*/
        //用标识符查找唯一对应数据
        Criteria cond = Criteria.where("syncTimeFlag").is("timeFlag");
        //查询设置的时间值
        Document timeDoc = syncTimeDao.findOne("syncTime", cond);
        //如果不为空
        if (timeDoc != null && timeDoc.containsKey("syncTime")) {
            //取得时间值
            String syncTimeValue = timeDoc.getString("syncTime");
            //转换类型为int
            amountStart = Integer.parseInt(syncTimeValue);
        } else {
            _logger.info("时间设置错误");
        }
        //开始日期：参数开始时间为空则选取配置时间(默认-3)
        Date from = VtuzxUtil.isEmpty(startDay)
                ? VtuzxUtil.calcDate(new Date(), Calendar.DAY_OF_MONTH, amountStart)
                : VtuzxUtil.parseDate(startDay);
        //结束时间：参数结束时间为空则默认当前时间
        Date to = VtuzxUtil.isEmpty(endDay)
                ? new Date()
                : VtuzxUtil.parseDate(endDay);
        //获取吉克云待同步调拨单
        _logger.info(String.format("开始获取%s - %s的待同步调拨单数据到中台", VtuzxUtil.formatYmdHmsF(from), VtuzxUtil.formatYmdHmsF(to)));
        basicService.syncAllocationTask(from, to, 0);
        //获取吉克云待同步销售单
        _logger.info(String.format("开始获取%s - %s的待同步销售单数据到中台", VtuzxUtil.formatYmdHmsF(from), VtuzxUtil.formatYmdHmsF(to)));
        basicService.syncSaleTask(from, to, 0);
        //根据待同步列表自动同步调拨单
//        _logger.info(String.format("开始同步列表中%s - %s的调拨单到金蝶", VtuzxUtil.formatYmdHmsF(from), VtuzxUtil.formatYmdHmsF(to)));
//        jiKeYunService.syncListAllocationLatest(from, to);
//        //根据待同步列表自动同步销售单
//        _logger.info(String.format("开始同步列表中%s - %s的销售单到金蝶", VtuzxUtil.formatYmdHmsF(from), VtuzxUtil.formatYmdHmsF(to)));
//        jiKeYunService.syncListSaleLatest(from, to);
    }
}